package com.xsd.vistor.kpiDemo;

/**
 * @Description:
 * @Author: zhoufuzong
 * @Created: 2021-03-11 20:41:27
 * @Version: 1.1.0
 */

/**
 * 年底，CEO和CTO开始评定员工一年的工作绩效，员工分为工程师和经理，CTO关注工程师的代码量、
 * 经理的新产品数量；CEO关注的是工程师的KPI和经理的KPI以及新产品数量。
 * 由于CEO和CTO对于不同员工的关注点是不一样的，这就需要对不同员工类型进行不同的处
 **/

/**
 * 访问者模式最大的优点就是增加访问者非常容易，我们从代码中可以看到，
 * 如果要增加一个访问者，只要新实现一个 Visitor 接口的类，
 * 从而达到数据对象与数据操作相分离的效果。如果不实用访问者模式，
 * 而又不想对不同的元素进行不同的操作，那么必定需要使用 if-else 和类型转换，这使得代码难以升级维护。
 *

 */

public class Client {
    public static void main(String[] args) {
        StaffStructure staffStructure = new StaffStructure();
        staffStructure.add(new Engineer("工程师-A"));
        staffStructure.add(new Engineer("工程师-B"));

        staffStructure.add(new Manager("经理-C"));
        staffStructure.add(new Manager("经理-D"));

        System.out.println("*****CTO关注报表*****");
        staffStructure.printInfo(new CTO());
        System.out.println("*****CEO关注报表*****");
        staffStructure.printInfo(new CEO());
    }
}
